<?php

/**
 * RHXController.php
 */

namespace RHX\Controller;

use Zend\Mvc\Controller\AbstractActionController;
use Zend\EventManager\EventManagerInterface;
use RHX\Model\Object\XRules;
use Zend\Session\Container;
use Zend\Log\Logger;
use Zend\Log\Writer\Stream;

/**
 * RHXController
 * Classe de base pour tous les controllers du Module
 *
 */
class RHXController extends AbstractActionController {
    /**
     *
     * @var Container
     */
    protected $navigation;

    /**
     *
     * @var Logger
     */
    protected $logger;

    /**
     * Affectation du Layout par défaut au Module
     * 
     * @param \Zend\EventManager\EventManagerInterface $events
     * @return \RHX\RHXController
     */
    public function setEventManager(EventManagerInterface $events) {
	parent::setEventManager($events);

	$controller = $this;
	$events->attach('dispatch', function ($e) use ($controller) {
		    $controller->layout()->setTemplate('layout/rhx');
		}, 100);

	// Changement de la zone géographique
	date_default_timezone_set('Europe/Paris');
	// Langue Locale, ne marche que pour strftime
	setlocale(LC_TIME, 'fr_FR.utf8', 'fra');

	// Variable Session
	$this->navigation = new Container('navigation');
	if (!$this->navigation->offsetExists('site')) {
	    $site = null;
	    try {
		$site = $this->getService('Table\SiteTable')
			->get(0);
	    }
	    catch (\Exception $ex) {
		$site = new \RHX\Model\Object\Site();
	    }
	    $this->navigation->offsetSet('site', $site);
	}
	if (!$this->navigation->offsetExists('periode')) {
	    $periode = null;
	    try {
		// On récupère la période en cours
		$periodeArray	 = $this->getService('Table\PeriodeTable')
			->getPeriodeByDate();
		$periode	 = new \RHX\Model\Object\Periode($periodeArray);
		if($periode->id == 0){
		    $periode = $this->getService('Table\PeriodeTable')
			    ->getLastPeriode();
		}
	    }
	    catch (\Exception $ex) {
		$periode = $this->getService('Table\PeriodeTable')
			    ->getLastPeriode();
	    }
	    $this->navigation->offsetSet('periode', $periode);
	}

	// Effacement des anciens fichiers de log
	$rep	 = opendir("module/RHX/logs");
	while (($fichier = readdir($rep)) !== false) {
	    $chemin = "module/RHX/logs/" . $fichier;
	    if ($fichier != ".." AND $fichier != "." AND !is_dir($fichier)) {
		unlink($chemin); // On efface.
	    }
	}
	closedir($rep);

	// Instanciation du fichier LOG
//	$this->logger	 = new Logger();
//	$writer		 = new Stream('module/RHX/logs/log-' . date('Y-m-d') . '.txt');
//	$this->logger->addWriter($writer);
	// Premier LOG
	//$this->Info(('=========');
	//$this->Info(('Demarrage');

	return $this;
    }

    /**
     * Méthode par défaut
     * 
     * @return array des variables à passer à la Vue
     */
    public function indexAction() {
	return array();
    }

    /**
     * Instance d'un Service
     * 
     * @param string $name Nom du Service
     * @param bool $full Nom Complet ou Pas
     * @return \Zend\Db\TableGateway\AbstractTableGateway
     */
    public function getService($name, $fullname = false) {
	$serviceName = '';
	if ($fullname) {
	    $serviceName = $name;
	}
	else {
	    $serviceName = "RHX\Model\\$name";
	}

	return $this->getServiceLocator()
			->get($serviceName);
    }

    /**
     * Règle de Gestion
     * 
     * @return XRules
     */
    public function getRules() {
	return $this->getServiceLocator()
			->get('RHX\Model\Object\XRules');
    }

    /**
     * Récupérer le Zend Adapter
     * 
     * @return \Zend\Db\Adapter\Adapter
     */
    public function getAdapter() {
	return $this->getServiceLocator()
			->get('Zend\Db\Adapter\Adapter2');
    }

    /**
     * Changement de Site
     * 
     * @param int $siteId
     */
    public function changeSite($siteId) {
	// Site
	$site = $this->getService('Table\SiteTable')
		->get($siteId);

	$this->navigation->offsetSet('site', $site);
    }

    /**
     * Changement de période
     * 
     * @param int $periodeId
     */
    public function changePeriode($periodeId) {
	// periode
	$periode = $this->getService('Table\PeriodeTable')
		->get($periodeId);
	$this->navigation->offsetSet('periode', $periode);
    }

    /**
     * Log d'information
     *
     * @param string $info
     */
    public function Info($info) {
//	$this->logger
//		->info($info);
    }

    /**
     * Log Erreur
     * @param type $err
     */
    public function Error($err) {
//	$this->logger
//		->err($err);
    }

    /**
     * Log Avertissement
     *
     * @param type $warning
     */
    public function Warning($warning) {
//	$this->logger
//		->warn($warning);
    }

    /**
     * Log Débogage
     * 
     * @param type $message
     */
    public function Debug($message) {
//	$this->logger
//		->debug($message);
    }
    
    /**
     * Variable POST
     * 
     * @return \Zend\Stdlib\Parameters
     */
    protected function getPost(){
	return $this->getRequest()
		->getPost();
    }
    
    /**
     * Variable GET
     * 
     * @return \Zend\Stdlib\Parameters
     */
    protected function getQuery(){
	return $this->getRequest()
		->getQuery();
    }
    
    /**
     * Emplacement du répertoire public
     * 
     * @return string
     */
    public function getPublicPath(){
	$realPath = @realpath(APPLICATION_PATH .'/../public/') ? @realpath(APPLICATION_PATH .'/../public/') : @realpath(APPLICATION_PATH .'/../');
	return ($realPath) ? $realPath : PATH_ROOT;
    }
}
